package net.zigin.nhi.could.waste.service;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

import net.zigin.nhi.could.waste.dao.BaseMapper;

/*#################################################################*
# 说明:以下代码通过哲勤代码生成工具自动生成    
# 工具:GeneratorCode
# 作者:mgw1986                                                  
# 生成时间:2021-9-7 19:08:53                                               
##################################################################*/


/**
 *  服务基类
 * @ClassName: BaseService
 * @author mgw1986
 * @date 2021-9-7 19:08:53
 * @version V1.0
 */
public interface BaseService<T, ID extends Serializable> {
	/**
	 * 设置具体调用的Mapper类
	 */
	BaseMapper<T, ID> getMapper();

	/**
	 * 根据主键删除数据记录
	 * @param id 主键字段
	 * @return
	 */
	int deleteByPrimaryKey(ID id);

	/**
	 * 根据条件删除数据记录
	 * @param paramMap 删除条件
	 * @return
	 */
	int deleteByCondition(Map<String, Object> paramMap);

	/**
	 * 插入对象到数据库,所有字段都会插入
	 * @param record 实体对象
	 * @return
	 */
	int insert(T record);

	/**
	 * 插入对象到数据库，如果对象中的属性为空，则插入时忽略
	 * @param record 实体对象
	 * @return
	 */
	int insertSelective(T record);
	
	/**
	 * 批量插入对象到数据库
	 * @param list
	 * @return
	 */
	int insertBath(List<T> list);

	/**
	 * 根据id查询实体对象
	 * @param id 主键字段
	 * @return
	 */
	T selectByPrimaryKey(ID id);

	/**
	 * 查询所有数据对象
	 * @return
	 */
	List<T> selectAllList();

	/**
	 * 分页查询对象集合
	 * @param paramMap 查询条件
	 * @return
	 */
	List<T> selectListByPage(Map<String, Object> paramMap);

	/**
	 * 根据条件查询对象集合
	 * @param paramMap 查询条件
	 * @return
	 */
	List<T> selectListByCondition(Map<String, Object> paramMap);

	/**
	 * 查询对象集合的行数
	 * @param paramMap 查询条件
	 * @return
	 */
	int selectCount(Map<String, Object> paramMap);

	/**
	 * 根据主键更新实体对象,如果字段为空，则不更新
	 * @param record 实体对象
	 * @return
	 */
	int updateByPrimaryKey(T record);

	/**
	 * 根据主键更新实体对象,所有字段都会更新
	 * @param record 实体对象
	 * @return
	 */
	int updateByPrimaryKeySelective(T record);
}
